FrameLib  2.0
DSP processing with frames of arbitrary timing and length
FrameLib_Parameters.h
Go to the documentation of this file.
1 
2 #ifndef FRAMELIB_PARAMETERS_H
3 #define FRAMELIB_PARAMETERS_H
4 
5 #include "FrameLib_Types.h"
6 #include "FrameLib_Errors.h"
7 
8 #include <vector>
9 #include <cstring>
10 #include <cassert>
11 #include <limits>
12 #include <string>
13 
31 {
32 
33  enum SetError { kSetSucceeded, kUnknownArgument, kUnknownParameter, kParameterNotSetByNumber, kParameterNotSetByString, kEnumUnknownIndex, kEnumUnknownString };
34 
35 public:
36 
39  enum ClipMode { kNone, kMin, kMax, kClip };
40 
41 public:
42 
51  class Serial
52  {
53 
54  public:
55 
56  // N.B. the assumption is that double is the largest type in use
57 
58  static const size_t alignment = sizeof(double);
59 
68  class Iterator
69  {
78  struct Entry
79  {
80  DataType mType;
81  char *mTag;
82  BytePointer mData;
83  size_t mSize;
84 
85  template <class T> T *data() { return reinterpret_cast<T *>(mData); }
86  };
87 
88  public:
89 
90  // Constructor
91 
92  Iterator(const Serial *serial, bool end) : mPtr(serial->mPtr + (end ? serial->mSize : 0)), mIndex(end ? serial->mNumTags : 0) {}
93 
94  // Operators
95 
96  bool operator == (const Iterator& it) const { return mPtr == it.mPtr; }
97  bool operator != (const Iterator& it) const { return !(*this == it); }
98 
100  Iterator operator ++ (int);
101 
102  // Getters
103 
104  DataType getType() const { return *(reinterpret_cast<DataType *>(mPtr)); }
105  char *getTag() const { return reinterpret_cast<char *>(mPtr + sizeType() + sizeSize()); }
106  const double *getVector(unsigned long *size) const;
107  unsigned long getVectorSize() const;
108  char *getString() const;
109  size_t getSize() const;
110  unsigned long getIndex() const { return mIndex; }
111 
112  // Match Tag
113 
114  bool matchTag(const char *tag) const {return !strcmp(tag, getTag()); }
115 
116  // Reads
117 
118  void read(Serial *serial) const;
119  void read(FrameLib_Parameters *parameters) const;
120  size_t read(double *output, unsigned long size) const;
121 
122  // Aliases (read but aliasing to a new tag)
123 
124  void alias(Serial *serial, const char *tag) const;
125  void alias(FrameLib_Parameters *serial, const char *tag) const;
126 
127  private:
128 
129  // Get Entry
130 
131  Entry getEntry() const;
132 
133  // Data
134 
135  BytePointer mPtr;
136  unsigned long mIndex;
137  };
138 
139  public:
140 
141  Iterator begin() const { return Iterator(this, false); }
142  Iterator end() const { return Iterator(this, true); }
143 
144  // Constructors and Destructor
145 
146  Serial(BytePointer ptr, size_t size);
147  Serial();
148 
149  // Non-copyable
150 
151  Serial(const Serial&) = delete;
152  Serial& operator=(const Serial&) = delete;
153 
154  // Size Calculations
155 
156  static size_t calcSize(const Serial *serialised) { return serialised != nullptr ? serialised->mSize : 0; }
157  static size_t calcSize(const FrameLib_Parameters *params);
158  static size_t calcSize(const char *tag, const char *str) { return sizeType() + sizeString(tag) + sizeString(str); }
159  static size_t calcSize(const char *tag, size_t N) { return sizeType() + sizeString(tag) + sizeArray(N); }
160 
161  // Get Sizes
162 
163  size_t getSize(const char *tag) const;
164  size_t getVectorSize(const char *tag) const;
165 
166  // Writes
167 
168  void write(const Serial *serialised);
169  void write(const FrameLib_Parameters *params);
170  void write(const Serial::Iterator& it);
171  void write(const char *tag, const char *str);
172  void write(const char *tag, const double *values, size_t N);
173 
174  // Reads
175 
176  void read(FrameLib_Parameters *parameters) const;
177  size_t read(const char *tag, double *output, unsigned long size) const;
178  bool read(const char *tag, FrameLib_Parameters *parameters) const;
179 
180  // Find Item
181 
182  Iterator find(const char *tag) const;
183 
184  // Utility
185 
186  unsigned long numTags() const { return mNumTags; };
187  size_t size() const { return mSize; }
188  void clear() { mSize = 0; }
189 
190  static size_t alignSize(size_t size) { return (size + (alignment - 1)) & ~(alignment - 1); }
191  static size_t inPlaceSize(size_t size) { return alignSize(sizeof(Serial)) + alignSize(size); }
192 
193  static Serial *newInPlace(void *ptr, size_t size) { return new (ptr) Serial(((BytePointer) ptr) + alignSize(sizeof(Serial)), size); }
194 
195  protected:
196 
197  // Check Size
198 
199  bool checkSize(size_t writeSize);
200 
201  private:
202 
203  // Debug
204 
205  void alignmentChecks() const;
206 
207  // Size Calculators
208 
209  static size_t sizeType() { return alignSize(sizeof(DataType)); }
210  static size_t sizeSize() { return alignSize(sizeof(size_t)); }
211  static size_t sizeString(const char *str) { return sizeSize() + alignSize(strlen(str) + 1); }
212  static size_t sizeArray(size_t N) { return sizeSize() + alignSize((N * sizeof(double))); }
213 
214  // Write Item
215 
216  void writeType(DataType type);
217  void writeSize(size_t size);
218  void writeString(const char *str);
219  void writeDoubles(const double *ptr, size_t N);
220 
221  // Read Item
222 
223  static DataType readType(BytePointer *readPtr);
224  static void readSize(BytePointer *readPtr, size_t *size);
225  static void readItem(BytePointer *readPtr, DataType type, BytePointer *data, size_t *size);
226 
227  // Skip Item
228 
229  static void skipItem(BytePointer *readPtr, DataType typ);
230 
231  protected:
232 
233  // Member Variables
234 
236  size_t mSize;
237  size_t mMaxSize;
238  unsigned long mNumTags;
239  };
240 
241 
250  class AutoSerial : public Serial
251  {
252  static const size_t minGrowSize = 512;
253 
254  public:
255 
257  AutoSerial(size_t size) : Serial(new Byte[size], size) {}
258  AutoSerial(const Serial& serial) : Serial(new Byte[serial.size()], serial.size()) { write(&serial); }
259  AutoSerial(const char *tag, const char *string) { write(tag, string); }
260  AutoSerial(const char *tag, const double *values, size_t N) { write(tag, values, N); }
261  ~AutoSerial() { if (mPtr) delete[] mPtr; }
262 
263  // Write Items
264 
265  void write(const Serial *serialised) { if (checkSize(calcSize(serialised))) Serial::write(serialised); }
266  void write(const char *tag, const char *str) { if (checkSize(calcSize(tag, str))) Serial::write(tag, str); }
267  void write(const char *tag, const double *values, size_t N) { if (checkSize(calcSize(tag, N))) Serial::write(tag, values, N); }
268 
269  private:
270 
271  bool checkSize(size_t writeSize);
272  };
273 
282  class Info
283  {
284 
285  public:
286 
287  void add(const char *str) { mInfoStrings.push_back(str); }
288  void add(const std::string &str) { mInfoStrings.push_back(str); }
289  const char *get(unsigned long idx) { return (idx < mInfoStrings.size()) ? mInfoStrings[idx].c_str() : "No parameter info available"; }
290 
291  private:
292 
293  std::vector<std::string> mInfoStrings;
294  };
295 
296 private:
297 
306  class Parameter
307  {
308 
309  public:
310 
311  enum Flags { kFlagInstantiation = 0x1, kFlagBool = 0x2, kFlagInteger = 0x4, kFlagNonNumeric = 0x8 };
312 
313  // Constructor / Destructor
314 
315  Parameter(const char *name, long argumentIdx);
316  virtual ~Parameter() {};
317 
318  // Setters
319 
320  virtual void addEnumItem(const char *str);
321 
322  void setInstantiation() { mFlags |= kFlagInstantiation; }
323  void setBoolOnly() { mFlags |= kFlagBool | kFlagInteger; }
324  void setIntegerOnly() { mFlags |= kFlagInteger; }
325  void setNonNumeric() { mFlags |= kFlagNonNumeric; }
326 
327  void setMin(double min);
328  void setMax(double max);
329  void setClip(double min, double max);
330 
331  virtual SetError set(const char *str) { return kParameterNotSetByString; }
332  virtual SetError set(double value) { return kParameterNotSetByNumber; }
333  virtual SetError set(double *values, size_t N);
334 
335  virtual void clear() = 0;
336 
337  // Getters
338 
339  // Setup
340 
341  virtual Type type() = 0;
342 
343  const char *name() const { return mName.c_str(); }
344  long argumentIdx() const { return mArgumentIdx; }
345  int flags() const { return mFlags; }
346 
347  ClipMode getClipMode() const;
348  double getMin() const { return mMin; }
349  double getMax() { return mMax; }
350  void getRange(double *min, double *max) const;
351 
352  virtual const char *getItemString(unsigned long item) const;
353 
354  // Values
355 
356  double getDefault() const { return mDefault; }
357 
358  virtual double getValue() const { return 0; }
359  virtual const char *getString() const { return nullptr; }
360  virtual size_t getArraySize() const { return 0; }
361  virtual size_t getArrayMaxSize() const { return 0; }
362  virtual const double *getArray() const { return nullptr; }
363  const double *getArray(size_t *size) const;
364 
365  bool changed();
366 
367  protected:
368 
369  bool mChanged;
370  int mFlags;
371 
372  double mDefault;
373  double mMin;
374  double mMax;
375 
376  private:
377 
378  std::string mName;
379  long mArgumentIdx;
380  };
381 
390  class Enum final : public Parameter
391  {
392 
393  public:
394 
395  Enum(const char *name, long argumentIdx);
396 
397  // Setters
398 
399  void addEnumItem(const char *str) override;
400 
401  SetError set(double value) override;
402  SetError set(double *values, size_t N) override;
403  virtual SetError set(const char *str) override;
404 
405  void clear() override { Enum::set(0.0); }
406 
407  virtual Type type() override { return kEnum; }
408 
409  // Getters
410 
411  virtual double getValue() const override { return mValue; }
412  virtual const char *getString() const override { return mItems[mValue].c_str(); }
413  virtual const char *getItemString(unsigned long item) const override { return mItems[item].c_str(); }
414 
415  private:
416 
417  std::vector<std::string> mItems;
418  unsigned long mValue;
419  };
420 
429  class Value final : public Parameter
430  {
431 
432  public:
433 
434  Value(const char *name, long argumentIdx, double defaultValue) : Parameter(name, argumentIdx), mValue(defaultValue)
435  { mDefault = defaultValue; }
436 
437  // Setters
438 
439  SetError set(double value) override;
440  SetError set(double *values, size_t N) override;
441 
442  void clear() override { Value::set(mDefault); };
443 
444  // Getters
445 
446  Type type() override { return kValue; }
447 
448  double getValue() const override { return mValue; }
449 
450  private:
451 
452  double mValue;
453  };
454 
463  class String final : public Parameter
464  {
465  const static size_t maxLen = 128;
466 
467  public:
468 
469  String(const char *name, long argumentIdx);
470 
471  // Setters
472 
473  SetError set(const char *str) override;
474 
475  void clear() override { String::set(nullptr); };
476 
477  // Getters
478 
479  Type type() override { return kString; }
480 
481  const char *getString() const override { return mCString; }
482 
483  private:
484 
485  char mCString[maxLen + 1];
486  };
487 
496  // Array Parameter Class
497 
498  class Array final : public Parameter, private std::vector<double>
499  {
500 
501  public:
502 
503  Array(const char *name, long argumentIdx, double defaultValue, size_t size);
504  Array(const char *name, long argumentIdx, double defaultValue, size_t maxSize, size_t size);
505 
506  // Setters
507 
508  SetError set(double *values, size_t N) override;
509 
510  void clear() override { Array::set(nullptr, 0); };
511 
512  // Getters
513 
514  Type type() override { return mVariableSize ? kVariableArray : kArray; }
515 
516  size_t getArraySize() const override { return mSize; }
517  size_t getArrayMaxSize() const override { return mItems.size(); }
518  const double * getArray() const override { return mItems.data(); }
519 
520  private:
521 
522  std::vector<double> mItems;
523  size_t mSize;
524 
525  const bool mVariableSize;
526  };
527 
528 public:
529 
530  // Constructor
531 
533  : mErrorReporter(errorReporter), mProxy(proxy), mReportErrors(true), mParameterInfo(info) {}
534 
535  // Non-copyable
536 
537  FrameLib_Parameters(const FrameLib_Parameters&) = delete;
539 
540  // Enable/Disable Error Reporting (enabled by default)
541 
542  void setErrorReportingEnabled(bool enable) { mReportErrors = enable; }
543 
544  // Size and Index
545 
546  unsigned long size() const { return mParameters.size(); }
547 
548  long getIdx(const char *name) const
549  {
550  for (unsigned long i = 0; i < mParameters.size(); i++)
551  if (strcmp(name, mParameters[i]->name()) == 0)
552  return i;
553 
554  long argumentIdx = convertToNumber(name);
555 
556  if (argumentIdx >= 0)
557  for (unsigned long i = 0; i < mParameters.size(); i++)
558  if (argumentIdx == mParameters[i]->argumentIdx())
559  return i;
560 
561  if (argumentIdx >= 0)
562  handleError(kUnknownArgument, argumentIdx, argumentIdx);
563  else
564  handleError(kUnknownParameter, -1, name);
565 
566  return -1;
567  }
568 
569  long maxArgument() const
570  {
571  long argument = -1;
572 
573  for (unsigned long i = 0; i < mParameters.size(); i++)
574  argument = std::max(mParameters[i]->argumentIdx(), argument);
575 
576  return argument;
577  }
578 
579  // Add Parameters
580 
581  void addBool(unsigned long index, const char *name, bool defaultValue = false, long argumentIdx = -1)
582  {
583  addParameter(index, new Value(name, argumentIdx, defaultValue));
584  mParameters.back()->setClip(false, true);
585  mParameters.back()->setBoolOnly();
586  }
587 
588  void addDouble(unsigned long index, const char *name, double defaultValue = 0.0, long argumentIdx = -1)
589  {
590  addParameter(index, new Value(name, argumentIdx, defaultValue));
591  }
592 
593  void addInt(unsigned long index, const char *name, long defaultValue = 0, long argumentIdx = -1)
594  {
595  addParameter(index, new Value(name, argumentIdx, defaultValue));
596  mParameters.back()->setIntegerOnly();
597  }
598 
599  void addString(unsigned long index, const char *name, long argumentIdx = -1)
600  {
601  addParameter(index, new String(name, argumentIdx));
602  }
603 
604  void addEnum(unsigned long index, const char *name, long argumentIdx = -1)
605  {
606  addParameter(index, new Enum(name, argumentIdx));
607  }
608 
609  void addEnumItem(unsigned long index, const char *str)
610  {
611  mParameters.back()->addEnumItem(str);
612  }
613 
614  void addBoolArray(unsigned long index, const char *name, bool defaultValue, size_t size, long argumentIdx = -1)
615  {
616  addParameter(index, new Array(name, argumentIdx, defaultValue, size));
617  mParameters.back()->setBoolOnly();
618  }
619 
620  void addIntArray(unsigned long index, const char *name, long defaultValue, size_t size, long argumentIdx = -1)
621  {
622  addParameter(index, new Array(name, argumentIdx, defaultValue, size));
623  mParameters.back()->setIntegerOnly();
624  }
625 
626  void addDoubleArray(unsigned long index, const char *name, double defaultValue, size_t size, long argumentIdx = -1)
627  {
628  addParameter(index, new Array(name, argumentIdx, defaultValue, size));
629  }
630 
631  void addVariableBoolArray(unsigned long index, const char *name, long defaultValue, size_t maxSize, size_t size, long argumentIdx = -1)
632  {
633  addParameter(index, new Array(name, argumentIdx, defaultValue, maxSize, size));
634  mParameters.back()->setBoolOnly();
635  }
636 
637  void addVariableIntArray(unsigned long index, const char *name, long defaultValue, size_t maxSize, size_t size, long argumentIdx = -1)
638  {
639  addParameter(index, new Array(name, argumentIdx, defaultValue, maxSize, size));
640  mParameters.back()->setIntegerOnly();
641  }
642 
643  void addVariableDoubleArray(unsigned long index, const char *name, double defaultValue, size_t maxSize, size_t size, long argumentIdx = -1)
644  {
645  addParameter(index, new Array(name, argumentIdx, defaultValue, maxSize, size));
646  }
647 
648  // Setters (N.B. - setters have sanity checks as the tags are set by the end-user)
649 
650  // Set as Instantiation Only
651 
652  void setInstantiation() { mParameters.back()->setInstantiation(); }
653 
654  // Set Range
655 
656  void setMin(double min) { mParameters.back()->setMin(min); }
657  void setMax(double max) { mParameters.back()->setMax(max); }
658  void setClip(double min, double max) { mParameters.back()->setClip(min, max); }
659 
660  // Set Value
661 
662  void set(Serial *serialised) { if (serialised) serialised->read(this); }
663 
664  void set(unsigned long idx, bool value) { set(idx, (double) value); }
665  void set(const char *name, bool value) { set(name, (double) value); }
666 
667  void set(unsigned long idx, long value) { set(idx, (double) value); }
668  void set(const char *name, long value) { set(name, (double) value); }
669 
670  void set(unsigned long idx, double value) { if (idx < size()) handleError(mParameters[idx]->set(value), idx, value); }
671  void set(const char *name, double value) { set(getIdx(name), value); }
672 
673  void set(unsigned long idx, char *str) { if (idx < size()) handleError(mParameters[idx]->set(str), idx, str); }
674  void set(const char *name, char *str) { set(getIdx(name), str); }
675 
676  void set(unsigned long idx, double *values, size_t N) { if (idx < size()) handleError(mParameters[idx]->set(values, N), idx, *values); }
677  void set(const char *name, double *values, size_t N) { set(getIdx(name), values, N); }
678 
679  void clear(unsigned long idx) { if (idx < size()) mParameters[idx]->clear(); }
680  void clear(const char *name) { clear(getIdx(name)); }
681 
682  // Getters (N.B. - getters have no sanity checks, because they are the programmer's responsibility)
683 
684  // Get Name
685 
686  std::string getName(unsigned long idx) const { return mParameters[idx]->name(); }
687 
688  long getArgumentIdx(unsigned long idx) const { return mParameters[idx]->argumentIdx(); }
689  long getArgumentIdx(const char *name) const { return mParameters[getIdx(name)]->argumentIdx(); }
690 
691  // Get Type
692 
693  Type getType(unsigned long idx) const { return mParameters[idx]->type(); }
694  Type getType(const char *name) const { return getType(getIdx(name)); }
695 
696  NumericType getNumericType(unsigned long idx) const;
697  NumericType getNumericType(const char *name) const { return getNumericType(getIdx(name)); }
698 
699  // N.B. the type string includes details of numeric type / instantion only
700 
701  std::string getTypeString(unsigned long idx) const;
702  std::string getTypeString(const char *name) const { return getTypeString(getIdx(name)); }
703 
704  // Get Range
705 
706  ClipMode getClipMode(unsigned long idx) const { return mParameters[idx]->getClipMode(); }
707  ClipMode getClipMode(const char *name) const { return getClipMode(getIdx(name)); }
708 
709  double getMin(unsigned long idx) const { return mParameters[idx]->getMin(); }
710  double getMin(const char *name) const { return getMin(getIdx(name)); }
711 
712  double getMax(unsigned long idx) const { return mParameters[idx]->getMax(); }
713  double getMax(const char *name) const { return getMax(getIdx(name)); }
714 
715  void getRange(unsigned long idx, double *min, double *max) const { return mParameters[idx]->getRange(min, max); }
716  void getRange(const char *name, double *min, double *max) const { return getRange(getIdx(name), min, max); }
717 
718  // Get Item Strings
719 
720  std::string getItemString(unsigned long idx, unsigned long item) const { return mParameters[idx]->getItemString(item); }
721  std::string getItemString(const char *name, unsigned long item) const { return getItemString(getIdx(name), item); }
722 
723  // Get Info
724 
725  std::string getInfo(unsigned long idx) const { return mParameterInfo ? mParameterInfo->get(idx) : "No parameter info available"; }
726  std::string getInfo(const char *name) const { return getInfo(getIdx(name)); }
727 
728  // Default Values
729 
730  double getDefault(unsigned long idx) const { return mParameters[idx]->getDefault(); }
731  double getDefault(const char *name) const { return getDefault(getIdx(name)); }
732 
733  std::string getDefaultString(unsigned long idx) const;
734  std::string getDefaultString(const char *name) const { return getDefaultString(getIdx(name)); }
735 
736  // Get Value
737 
738  double getValue(unsigned long idx) const { return mParameters[idx]->getValue(); }
739  double getValue(const char *name) const { return getValue(getIdx(name)); }
740 
741  long getInt(unsigned long idx) const { return (long) getValue(idx); }
742  long getInt(const char *name) const { return getInt(getIdx(name)); }
743 
744  long getBool(unsigned long idx) const { return (bool) getValue(idx); }
745  bool getBool(const char *name) const { return (bool) getValue(getIdx(name)); }
746 
747  const char *getString(unsigned long idx) const { return mParameters[idx]->getString(); }
748  const char *getString(const char *name) const { return getString(getIdx(name)); }
749 
750  const double *getArray(unsigned long idx) const { return mParameters[idx]->getArray(); }
751  const double *getArray(const char *name) const { return getArray(getIdx(name)); }
752  const double *getArray(unsigned long idx, size_t *size) const { return mParameters[idx]->getArray(size); }
753  const double *getArray(const char *name, size_t *size) const { return getArray(getIdx(name), size); }
754 
755  size_t getArraySize(unsigned long idx) const { return mParameters[idx]->getArraySize(); }
756  size_t getArraySize(const char *name) const { return getArraySize(getIdx(name)); }
757 
758  size_t getArrayMaxSize(unsigned long idx) const { return mParameters[idx]->getArrayMaxSize(); }
759  size_t getArrayMaxSize(const char *name) const { return getArrayMaxSize(getIdx(name)); }
760 
761  bool changed(unsigned long idx) { return mParameters[idx]->changed(); }
762  bool changed(const char *name) { return changed(getIdx(name)); }
763 
764 private:
765 
766  // Error handling
767 
768  template <typename T>
769  void handleError(SetError error, long idx, T arg) const
770  {
771  if (error && mReportErrors)
772  {
773  switch (error)
774  {
775  case kUnknownArgument:
776  mErrorReporter.reportError(kErrorParameter, mProxy, "argument # out of range", idx + 1);
777  break;
778  case kUnknownParameter:
779  mErrorReporter.reportError(kErrorParameter, mProxy, "no parameter named '#'", arg);
780  break;
781  case kParameterNotSetByNumber:
782  mErrorReporter.reportError(kErrorParameter, mProxy, "parameter '#' cannot be set by a number", mParameters[idx]->name());
783  break;
784  case kParameterNotSetByString:
785  mErrorReporter.reportError(kErrorParameter, mProxy, "parameter '#' cannot be set by a string", mParameters[idx]->name());
786  break;
787  case kEnumUnknownIndex:
788  mErrorReporter.reportError(kErrorParameter, mProxy, "enum parameter '#' does not contain an item numbered #", mParameters[idx]->name(), arg);
789  break;
790  case kEnumUnknownString:
791  mErrorReporter.reportError(kErrorParameter, mProxy, "enum parameter '#' does not contain an item named '#'", mParameters[idx]->name(), arg);
792  break;
793  default:
794  break;
795  }
796  }
797  }
798 
799  // Utility
800 
801  void addParameter(unsigned long index, Parameter *parameter)
802  {
803  assert((index == mParameters.size()) && "parameters must be added in order");
804  mParameters.add(parameter);
805  }
806 
807  static long convertToNumber(const char *name)
808  {
809  long result = 0;
810 
811  for (unsigned long i = 0; ; i++)
812  {
813  long current = name[i];
814 
815  if (current == 0 && i)
816  return result;
817 
818  if (current < '0' || current > '9')
819  return -1;
820 
821  result = (result * 10) + (current - '0');
822  }
823  }
824 
825  // Data
826 
827  FrameLib_ErrorReporter& mErrorReporter;
828  FrameLib_Proxy *mProxy;
829  bool mReportErrors;
830 
831  FrameLib_OwnedList<Parameter> mParameters;
832  Info *mParameterInfo;
833 };
834 
835 #endif
AutoSerial(size_t size)
Definition: FrameLib_Parameters.h:257
size_t getArraySize(unsigned long idx) const
Definition: FrameLib_Parameters.h:755
void addEnumItem(unsigned long index, const char *str)
Definition: FrameLib_Parameters.h:609
~AutoSerial()
Definition: FrameLib_Parameters.h:261
void add(const char *str)
Definition: FrameLib_Parameters.h:287
long getBool(unsigned long idx) const
Definition: FrameLib_Parameters.h:744
Definition: FrameLib_Parameters.h:38
void addDouble(unsigned long index, const char *name, double defaultValue=0.0, long argumentIdx=-1)
Definition: FrameLib_Parameters.h:588
Iterator find(const char *tag) const
Definition: FrameLib_Parameters.cpp:307
double getValue(const char *name) const
Definition: FrameLib_Parameters.h:739
a set of parameters for a FrameLib object.
Definition: FrameLib_Parameters.h:30
NumericType getNumericType(const char *name) const
Definition: FrameLib_Parameters.h:697
void add(const std::string &str)
Definition: FrameLib_Parameters.h:288
unsigned long getVectorSize() const
Definition: FrameLib_Parameters.cpp:43
static size_t inPlaceSize(size_t size)
Definition: FrameLib_Parameters.h:191
Definition: FrameLib_Errors.h:22
static Serial * newInPlace(void *ptr, size_t size)
Definition: FrameLib_Parameters.h:193
unsigned long mNumTags
Definition: FrameLib_Parameters.h:238
DataType
Definition: FrameLib_Types.h:55
Serial()
Definition: FrameLib_Parameters.cpp:162
Iterator end() const
Definition: FrameLib_Parameters.h:142
void setClip(double min, double max)
Definition: FrameLib_Parameters.h:658
static size_t calcSize(const Serial *serialised)
Definition: FrameLib_Parameters.h:156
void getRange(const char *name, double *min, double *max) const
Definition: FrameLib_Parameters.h:716
char * getString() const
Definition: FrameLib_Parameters.cpp:52
void write(const char *tag, const char *str)
Definition: FrameLib_Parameters.h:266
DataType getType() const
Definition: FrameLib_Parameters.h:104
std::string getName(unsigned long idx) const
Definition: FrameLib_Parameters.h:686
void getRange(unsigned long idx, double *min, double *max) const
Definition: FrameLib_Parameters.h:715
const double * getArray(unsigned long idx, size_t *size) const
Definition: FrameLib_Parameters.h:752
a set of tagged parameter values using external non-owned memory.
Definition: FrameLib_Parameters.h:51
double getMin(unsigned long idx) const
Definition: FrameLib_Parameters.h:709
void read(Serial *serial) const
Definition: FrameLib_Parameters.cpp:74
std::string getItemString(const char *name, unsigned long item) const
Definition: FrameLib_Parameters.h:721
void addVariableIntArray(unsigned long index, const char *name, long defaultValue, size_t maxSize, size_t size, long argumentIdx=-1)
Definition: FrameLib_Parameters.h:637
bool operator==(const Iterator &it) const
Definition: FrameLib_Parameters.h:96
a virtual struct allowing for extensible communication to/from the host environment.
Definition: FrameLib_Types.h:69
ClipMode getClipMode(unsigned long idx) const
Definition: FrameLib_Parameters.h:706
Definition: FrameLib_Parameters.h:38
AutoSerial(const Serial &serial)
Definition: FrameLib_Parameters.h:258
const double * getVector(unsigned long *size) const
Definition: FrameLib_Parameters.cpp:29
void setMax(double max)
Definition: FrameLib_Parameters.h:657
double getDefault(const char *name) const
Definition: FrameLib_Parameters.h:731
double getMin(const char *name) const
Definition: FrameLib_Parameters.h:710
unsigned long numTags() const
Definition: FrameLib_Parameters.h:186
void setErrorReportingEnabled(bool enable)
Definition: FrameLib_Parameters.h:542
void addBool(unsigned long index, const char *name, bool defaultValue=false, long argumentIdx=-1)
Definition: FrameLib_Parameters.h:581
void write(const Serial *serialised)
Definition: FrameLib_Parameters.cpp:216
void clear(unsigned long idx)
Definition: FrameLib_Parameters.h:679
size_t mSize
Definition: FrameLib_Parameters.h:236
Definition: FrameLib_Parameters.h:38
long maxArgument() const
Definition: FrameLib_Parameters.h:569
a class used to report errors to the host environment.
Definition: FrameLib_Errors.h:34
bool matchTag(const char *tag) const
Definition: FrameLib_Parameters.h:114
Type getType(unsigned long idx) const
Definition: FrameLib_Parameters.h:693
std::string getInfo(unsigned long idx) const
Definition: FrameLib_Parameters.h:725
void addVariableBoolArray(unsigned long index, const char *name, long defaultValue, size_t maxSize, size_t size, long argumentIdx=-1)
Definition: FrameLib_Parameters.h:631
an iterator for the items in a Serial.
Definition: FrameLib_Parameters.h:68
Definition: FrameLib_Parameters.h:39
void write(const char *tag, const double *values, size_t N)
Definition: FrameLib_Parameters.h:267
unsigned char * BytePointer
Definition: FrameLib_Types.h:27
size_t size() const
Definition: FrameLib_Parameters.h:187
std::string getInfo(const char *name) const
Definition: FrameLib_Parameters.h:726
void addVariableDoubleArray(unsigned long index, const char *name, double defaultValue, size_t maxSize, size_t size, long argumentIdx=-1)
Definition: FrameLib_Parameters.h:643
size_t mMaxSize
Definition: FrameLib_Parameters.h:237
size_t getArraySize(const char *name) const
Definition: FrameLib_Parameters.h:756
Definition: FrameLib_Parameters.h:39
NumericType
Definition: FrameLib_Parameters.h:37
static const size_t alignment
Definition: FrameLib_Parameters.h:58
void addIntArray(unsigned long index, const char *name, long defaultValue, size_t size, long argumentIdx=-1)
Definition: FrameLib_Parameters.h:620
Iterator & operator++()
Definition: FrameLib_Parameters.cpp:11
bool changed(const char *name)
Definition: FrameLib_Parameters.h:762
long getArgumentIdx(unsigned long idx) const
Definition: FrameLib_Parameters.h:688
Definition: FrameLib_Parameters.h:38
Definition: FrameLib_Parameters.h:39
AutoSerial(const char *tag, const char *string)
Definition: FrameLib_Parameters.h:259
Definition: FrameLib_Parameters.h:38
bool operator!=(const Iterator &it) const
Definition: FrameLib_Parameters.h:97
size_t getSize() const
Definition: FrameLib_Parameters.cpp:61
const char * getString(unsigned long idx) const
Definition: FrameLib_Parameters.h:747
unsigned char Byte
Definition: FrameLib_Types.h:26
double getValue(unsigned long idx) const
Definition: FrameLib_Parameters.h:738
void setMin(double min)
Definition: FrameLib_Parameters.h:656
BytePointer mPtr
Definition: FrameLib_Parameters.h:235
long getInt(unsigned long idx) const
Definition: FrameLib_Parameters.h:741
Definition: FrameLib_Parameters.h:37
NumericType getNumericType(unsigned long idx) const
Definition: FrameLib_Parameters.cpp:695
void clear(const char *name)
Definition: FrameLib_Parameters.h:680
unsigned long size() const
Definition: FrameLib_Parameters.h:546
double getMax(const char *name) const
Definition: FrameLib_Parameters.h:713
Serial & operator=(const Serial &)=delete
AutoSerial(const char *tag, const double *values, size_t N)
Definition: FrameLib_Parameters.h:260
a class for passing info strings to FrameLib_Parameters.
Definition: FrameLib_Parameters.h:282
const double * getArray(unsigned long idx) const
Definition: FrameLib_Parameters.h:750
std::string getTypeString(unsigned long idx) const
Definition: FrameLib_Parameters.cpp:706
char * getTag() const
Definition: FrameLib_Parameters.h:105
std::string getItemString(unsigned long idx, unsigned long item) const
Definition: FrameLib_Parameters.h:720
void alias(Serial *serial, const char *tag) const
Definition: FrameLib_Parameters.cpp:112
void write(const Serial *serialised)
Definition: FrameLib_Parameters.h:265
ClipMode
Definition: FrameLib_Parameters.h:39
AutoSerial()
Definition: FrameLib_Parameters.h:256
long getArgumentIdx(const char *name) const
Definition: FrameLib_Parameters.h:689
ClipMode getClipMode(const char *name) const
Definition: FrameLib_Parameters.h:707
size_t getArrayMaxSize(unsigned long idx) const
Definition: FrameLib_Parameters.h:758
void setInstantiation()
Definition: FrameLib_Parameters.h:652
long getIdx(const char *name) const
Definition: FrameLib_Parameters.h:548
Type
Definition: FrameLib_Parameters.h:38
Definition: FrameLib_Parameters.h:37
bool getBool(const char *name) const
Definition: FrameLib_Parameters.h:745
const double * getArray(const char *name, size_t *size) const
Definition: FrameLib_Parameters.h:753
long getInt(const char *name) const
Definition: FrameLib_Parameters.h:742
static size_t alignSize(size_t size)
Definition: FrameLib_Parameters.h:190
bool checkSize(size_t writeSize)
Definition: FrameLib_Parameters.cpp:390
unsigned long getIndex() const
Definition: FrameLib_Parameters.h:110
double getDefault(unsigned long idx) const
Definition: FrameLib_Parameters.h:730
Type getType(const char *name) const
Definition: FrameLib_Parameters.h:694
const double * getArray(const char *name) const
Definition: FrameLib_Parameters.h:751
static size_t calcSize(const char *tag, const char *str)
Definition: FrameLib_Parameters.h:158
an extension of Serial that manages its own resizable memory.
Definition: FrameLib_Parameters.h:250
size_t getArrayMaxSize(const char *name) const
Definition: FrameLib_Parameters.h:759
Iterator begin() const
Definition: FrameLib_Parameters.h:141
std::string getDefaultString(const char *name) const
Definition: FrameLib_Parameters.h:734
Definition: FrameLib_Parameters.h:39
void addInt(unsigned long index, const char *name, long defaultValue=0, long argumentIdx=-1)
Definition: FrameLib_Parameters.h:593
Iterator(const Serial *serial, bool end)
Definition: FrameLib_Parameters.h:92
std::string getTypeString(const char *name) const
Definition: FrameLib_Parameters.h:702
FrameLib_Parameters(FrameLib_ErrorReporter &errorReporter, FrameLib_Proxy *proxy, Info *info)
Definition: FrameLib_Parameters.h:532
Definition: FrameLib_Parameters.h:37
void addBoolArray(unsigned long index, const char *name, bool defaultValue, size_t size, long argumentIdx=-1)
Definition: FrameLib_Parameters.h:614
bool changed(unsigned long idx)
Definition: FrameLib_Parameters.h:761
void addEnum(unsigned long index, const char *name, long argumentIdx=-1)
Definition: FrameLib_Parameters.h:604
const char * getString(const char *name) const
Definition: FrameLib_Parameters.h:748
void addString(unsigned long index, const char *name, long argumentIdx=-1)
Definition: FrameLib_Parameters.h:599
static size_t calcSize(const char *tag, size_t N)
Definition: FrameLib_Parameters.h:159
std::string getDefaultString(unsigned long idx) const
Definition: FrameLib_Parameters.cpp:729
void clear()
Definition: FrameLib_Parameters.h:188
void addDoubleArray(unsigned long index, const char *name, double defaultValue, size_t size, long argumentIdx=-1)
Definition: FrameLib_Parameters.h:626
Definition: FrameLib_Parameters.h:37
double getMax(unsigned long idx) const
Definition: FrameLib_Parameters.h:712